package cn.tedu.oop;

import java.util.InputMismatchException;
import java.util.Scanner;

/*本类用作异常的入门案例*/
public class ExceptionDemo {
    public static void main(String[] args) {
       // method1();//调用暴露异常的方法
        method2();//调用解决异常的方案1--捕获处理-自己解决
      // method3();//调用解决异常的方案2--向上抛出--别人解决
        f();
    }
    private static void f(){
        try{
            method3();
        }catch (Exception e){
            System.out.println("输入的数据不对!");
        }
    }/*如果一个方法抛出了异常,那么谁来调用这个方法,谁就需要处理这个异常
    这里的处理也有两种方法:捕获解决 或者 继续向上抛出
    但注意:我们一般会在main()调用之前将异常解决掉
    而不是将问题抛给main(),因为没人解决了,该报错还是报错*/

    /*异常抛出的格式:在方法的小括号与大括号之间,写throws 异常类型
    * 如果有多个异常,使用逗号分割即可*/
    private static void method3() throws ArithmeticException,InputMismatchException,Exception{
        System.out.println("请您输入要计算的第1个整数");
        int a=new Scanner(System.in).nextInt();
        System.out.println("请您输入要计算的第2个整数");
        int b=new Scanner(System.in).nextInt();
        System.out.println(a/b);
    }

    /*异常捕获处理的格式:
    * try{
    *   可能会抛出异常的代码块
    * }catch(预先设想的异常类型 异常名){
    *   万一捕获到了异常,进行处理的解决方案
    * }
    * try-catch结构可以嵌套,如果有多种异常类型需要特殊处理的话
    *
    * */
    private static void method2() {
        try{
            System.out.println("请您输入要计算的第1个整数");
            int a=new Scanner(System.in).nextInt();
            System.out.println("请您输入要计算的第2个整数");
            int b=new Scanner(System.in).nextInt();
            System.out.println(a/b);
        }catch (ArithmeticException e){
            System.out.println("除数不能为0!");
        }catch (InputMismatchException e){
            System.out.println("请输入规定的整数");
            /*使用多态的思想,不论是什么子异常,统一看作父类型Eption
            * 做出更加通用的解决方案,甚至可以只写1个,上面2   个不写了*/
        }catch (Exception e){
            System.out.println("您输入的数据不对,请重新输入~");
        }

    }

    private static void method1() {
        System.out.println("请您输入要计算的第1个整数");
        int a=new Scanner(System.in).nextInt();
        System.out.println("请您输入要计算的第2个整数");
        int b=new Scanner(System.in).nextInt();
        System.out.println(a/b);
        //输入10和0,报错:ArithmeticException--算数异常,除数不能为0,数学规定
        //输入10和3.4,报错:InputMismatchException--输入不匹配异常
        /*1.不要害怕BUG,真正的勇士敢于直面自己写的BUG
        * 2,学会看报错的信息提示,确定自己报错的方向
        * 3,学会看报错的行号提示,确定自己报错的位置,哪里不对点哪里
        * 注意:源码不会错,要看自己写的代码*/
    }
}
